package classificacao;

import java.util.HashMap;

import caracteristicas.ImageClass;
import main.ImageReaderValidation;

public class ClassificarImagem {
	
	private final int QTDVIZINHOS = 1;
	
	public ClassificarImagem(){
		
	}
	
	
	public double classificador(){
		
		ImageReaderValidation imagValidation = new ImageReaderValidation();
		StringBuilder sb = new StringBuilder();
		ImageClass[] vizinhos;
		int classeRetornada;
		int contadorAcertos = 0;
		
		for (int i = 0; i < 12569; i++) {
			if(i < 10){
				sb.append("0000");
			}else if (i<100){
				sb.append("000");
				
			}else if (i<1000){
				sb.append("00");
				
			}else if (i<10000){
				sb.append("0");	
			}
			
			sb.append(i);
			sb.append(".jpg");
			
			ImageClass carcImagem = imagValidation.lerImagens(sb.toString());
			vizinhos = Knn.calcularVizinhos(carcImagem.getMomentosHu(), QTDVIZINHOS);
			classeRetornada = retornaClasse(vizinhos);
			if (classeRetornada == carcImagem.getClasse()){
				contadorAcertos++;
			}
				
			sb.delete(0, sb.length());
			System.out.println("Eu acertei: " + contadorAcertos + " Para " + (i+1) + " imagens");
		}

		return (contadorAcertos/12569.0) * 100;
	}
	
	private int retornaClasse (ImageClass[] vizinhos){
		int array[] = new int[43];
		int classe;
		
		for (int i = 0; i < vizinhos.length; i++) {
			classe = vizinhos[i].getClasse();
			array[classe]++;
		}
		
		int valorMaiorClasse = 0;
		int indiceMaiorClasse = 0;
		
		for (int i = 0; i < array.length; i++) {
			if (array[i] > valorMaiorClasse){
				valorMaiorClasse = array[i];
				indiceMaiorClasse = i;
			}
		}
		return indiceMaiorClasse;
	}
	

}
